﻿using PersistenceLayer.DAL;
using PersistenceLayer.Model;
using SupportLayer.Constantes.OUTROS;
using SupportLayer.Constantes.PRODUTO;
using SupportLayer.Enums;
using SupportLayer.Objetos.Produto;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace ByBikeShop.Administracao.Pages
{
	public partial class Categoria : BaseAdmin
	{
		private Acao GetAction
		{
			get
			{
				if ((Request.QueryString[OUTROS.ACAO] == null) || (Request.QueryString[OUTROS.ACAO].ToString() == ""))
					return Acao.ADICIONAR;

				return (Acao)(Convert.ToInt32(Request.QueryString[OUTROS.ACAO].ToString()));
			}
		}

		private int GetCategoriaID
		{
			get
			{
				if ((GetAction == Acao.ADICIONAR) || (GetAction == Acao.VER))
					return 0;

				if ((Request.QueryString[OUTROS.CATEGORIA_ID] == null) || (Request.QueryString[OUTROS.CATEGORIA_ID].ToString() == ""))
					return 0;

				return Convert.ToInt32(Request.QueryString[OUTROS.CATEGORIA_ID].ToString());
			}
		}

		protected void Page_Load(object sender, EventArgs e)
		{
			base.PageLoad(true);
		}

		public override void CarregaDados()
		{
			if (IsPostBack)
				return;

			if ((GetAction == Acao.ADICIONAR) || (GetAction == Acao.VER))
				return;

			if (GetCategoriaID == 0)
				return;

			Produto_Categoria pc = new Produto_CategoriaDAL().Obter(GetCategoriaID);
			txtDescricao.Text = pc.Descricao;
			txtTags.Text = pc.Tags;
		}

		public override void CarregaGrid()
		{
			grdCategoria.AutoGenerateColumns = false;
			grdCategoria.Columns.Clear();

			grdCategoria.Columns.Add(Util.Gridview.GeraBoundField(CATEGORIA.ID, "ID", 20));
			grdCategoria.Columns.Add(Util.Gridview.GeraBoundField(CATEGORIA.DESCRICAO, "Descrição", 400));
			grdCategoria.Columns.Add(Util.Gridview.GeraBoundField(CATEGORIA.TAGS, "Tags", 400));
			grdCategoria.Columns.Add(Util.Gridview.GeraButtonField(ButtonType.Image, "", "editar", "/Imagens/Icones/edit.svg", 30));
			grdCategoria.Columns.Add(Util.Gridview.GeraButtonField(ButtonType.Image, "", "deletar", "/Imagens/Icones/delete.svg", 30));
		}

		public override void PopulaGrid()
		{
			try
			{
				DataTable dt = new DataTable();
				dt.Columns.Add(CATEGORIA.ID);
				dt.Columns.Add(CATEGORIA.DESCRICAO);
				dt.Columns.Add(CATEGORIA.TAGS);


				foreach (Produto_Categoria pc in new Produto_CategoriaDAL().Listar())
					dt.Rows.Add(pc.ID, pc.Descricao, pc.Tags);


				grdCategoria.DataSource = dt;
				grdCategoria.DataBind();
				grdCategoria.Columns[0].Visible = false;

			}
			catch (Exception)
			{
				throw;
			}
		}

		protected void grdCategoria_RowCommand(object sender, GridViewCommandEventArgs e)
		{
			int ID = Util.Gridview.GetID(sender, e);
			Produto_CategoriaDAL pcd = new Produto_CategoriaDAL();

			if (e.CommandName.Equals("editar"))
				Response.Redirect(string.Format("Categoria.aspx?{0}={1}&{2}={3}", OUTROS.ACAO, (int)Acao.EDITAR, OUTROS.CATEGORIA_ID, ID));
			else if (e.CommandName.Equals("deletar"))
				pcd.Deletar(pcd.Obter(ID));
			Response.Redirect(string.Format("Categoria.aspx?{0}={1}", OUTROS.ACAO, (int)Acao.ADICIONAR));
		}

		protected void grdCategoria_RowDataBound(object sender, GridViewRowEventArgs e)
		{
			if (e.Row.RowType == DataControlRowType.DataRow)
			{
				Image imgEditar = (Image)e.Row.Cells[3].Controls[0];
				imgEditar.Height = 26;
				Image imgExcluir = (Image)e.Row.Cells[4].Controls[0];
				imgExcluir.Height = 30;
			}
		}

		protected void btnSalvar_Click(object sender, EventArgs e)
		{
			try
			{
				if (txtDescricao.Text == string.Empty)
					throw new ApplicationException("Digite algo no campo DESCRIÇÃO");

				Produto_CategoriaDAL pcd = new Produto_CategoriaDAL();

				if (GetAction == Acao.ADICIONAR)
				{
					Produto_Categoria pc = new Produto_Categoria();
					pc.Descricao = txtDescricao.Text;
					pc.Tags = txtTags.Text;
					pc.ID = pcd.Adicionar(pc);
				}
				else if (GetAction == Acao.EDITAR)
				{
					Produto_Categoria pc = pcd.Obter(GetCategoriaID);
					pc.Descricao = txtDescricao.Text;
					pc.Tags = txtTags.Text;
					pcd.Atualizar(pc);
				}

				PopulaGrid();
			}
			catch (Exception ex)
			{
				ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "a", "alert('" + ex.Message + "');", true);
			}
		}

		protected void btnLimpar_Click(object sender, EventArgs e)
		{
			Response.Redirect(string.Format("Categoria.aspx?{0}={1}", OUTROS.ACAO, (int)Acao.ADICIONAR));
		}
	}
}